﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using SqlSugar;
using WpfApp3.Models;

namespace WpfApp3.Data_Operations
{
    public class Sqlserver
    {




        public static SqlSugarClient DbContextSqlserver { get; } = new SqlSugarClient(new ConnectionConfig
        {
            ConnectionString = "Data Source=localhost;Initial Catalog=MyDatabase;Integrated Security=True;",
            DbType = SqlSugar.DbType.SqlServer,
            IsAutoCloseConnection = true,
            InitKeyType = InitKeyType.Attribute
        });
        private readonly SqlSugarClient dbSqlserver = Sqlserver.DbContextSqlserver;

        public Sqlserver()
        {
            EnsureDatabaseInitialized();
        }
        private void EnsureDatabaseInitialized()
        {

            try
            {


                // 执行数据库连接和表创建
                CreateTableIfNotExists();
                MessageBox.Show("Sqlserver数据库初始化成功");
            }
            catch (Exception ex)
            {
                MessageBox.Show($"sqlserver数据库初始化失败: {ex.Message}");
                // 实际项目中建议记录日志
                Debug.WriteLine($"sqlserver初始化错误: {ex}");
            }
        }
      

        private void CreateTableIfNotExists()
        {
    

            dbSqlserver.CodeFirst.InitTables(typeof(Person));//根据 Person 实体类的定义，自动创建对应的数据库表
                                                          // 如果表已存在，默认不会修改（可配置为自动更新）
                                                          // 支持一次性创建多个表（传入多个类型）；db.CodeFirst.InitTables(
                                                          //typeof(Person), 
                                                          //typeof(Order), 
                                                          //typeof(Product)
                                                          //  );  //一次性创建多个表
        }
        public void AddPerson(Person person)
        {
            // 插入并返回自增 Id
            var identity = dbSqlserver.Insertable(person).ExecuteReturnIdentity();
            person.Id = Convert.ToInt32(identity); // 将 Id 赋值给实体

        }

        // 从数据库中删除人员
        public void DeletePerson(string name)
        {
            dbSqlserver.Deleteable<Person>().Where(p => p.Name == name).ExecuteCommand();
        }

        // 修改数据库中的人员信息
        public void UpdatePerson(Person person)
        {
            dbSqlserver.Updateable(person).ExecuteCommand();
        }

        // 从数据库中获取所有人员信息
        public List<Person> GetAllPersons()
        {
            return dbSqlserver.Queryable<Person>().ToList();
        }

        // 使用原生 SQL 查询
        public List<Person> GetPersonsByNativeSql()
        {
            string sql = "SELECT * FROM Persons";
            return dbSqlserver.Ado.SqlQuery<Person>(sql);
        }
    }

}

